连接查询语法
以下介绍语法均为99版基本使用语法
1 | ##99版,支持所有类型 |
通常为各表取别名,以壁面歧义,增加可读性。
ConnectType 可选 内连
inner
,左外left
,右外right
,全外full
,交叉连接cross
,缺省时为inner
内连接
-
等值连接
连接条件为等值判断,从两个表中查询数据合并为一个表。
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#查询部门个数>3的城市名和部门个数(分组、筛选)
select city, count(*)
from departments d
inner join locations l
on l.location_id = d.location_id
group by d.location_id
having count(*) >3;
#查询员工名、部门名、工种名,并按部门名降序(多表连接)
select last_name,department_name,job_title
from employees e
inner join departments d
on e.department_id = e.department_id
inner join jobs j
on e.job_id = j.job_id
order by department_name desc; -
非等值连接
除连接条件改变后,其余格式、用法与等值连接相同。
-
自连接
将一张表视为多张,在同一张表中查找信息进行匹配。
示例:
1
2
3
4
5#查找上级
select e.last_name,m.last_name
from employees e
join employees m
on e.manager_id = m.employee_id
外部连接
用于查询部分数据仅在一个表中存的情况
- 区分主从表,若从表中存在匹配对象,显示匹配的值;若无,显示null
- 查询结果为主表中的所有记录:结果= 内连结果 + 【主表记录-null】
-
左/右外连接
左外连接
left
时,join
左侧为主表;右外连接right
时,join
右侧为主表1
2
3
4
5
6use girls;
select b.name
from beauty b
left join boys bo
on bo.id = b.boyfriend_id
where bo.id is null;使用时先根据求取目标,确定主表
-
全外连接
相当于将两个表分别进行左外、右外连接后将结果合并。(MYSQL不支持
full
)1
2
3
4
5use girls;
select b.* ,bo.*
from beauty b
full outer join boys bo
on bo.id = b.boyfriend_id ;交叉连接
相当于笛卡尔乘积
示例:
1
2
3
4
5
6
7
8
9#99交叉连接
use girls;
select b.name ,bo.boyName
from beauty b
cross join boys bo;
#等效笛卡尔
select b.name ,bo.boyName
from beauty b, boys bo;